﻿using System.ComponentModel;
using System.Threading.Tasks;
using Abp.Application.Services.Dto;
using SingleUserMall.Common;
using SingleUserMall.Users.Form;
using SingleUserMall.Users.VO;

namespace SingleUserMall.Users
{
    /// <summary>
    /// 用户管理
    /// </summary>
    [Description("用户管理")]
    public interface IUserManageAppService : IManageService
    {
        /// <summary>
        /// 获取用户列表
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<PagedResultDto<UserVO>> GetUsersAsync(UserSearchForm form);
        /// <summary>
        /// 获取用户详情
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<UserVO> GetUserAsync(SingleId<long> form);
        /// <summary>
        /// 获取管理员列表
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<PagedResultDto<AdminVO>> GetAdminsAsync(UserSearchForm form);
        /// <summary>
        /// 保存管理员
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task SaveAdminAsync(AdminForm form);
        /// <summary>
        /// 设置状态
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task SetActiveAsync(ActiveForm form);
        /// <summary>
        /// 登录
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<AdminVO> LoginAsync(LoginForm form);
        /// <summary>
        /// 删除用户
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task RemoveAsync(SingleId<long> form);
        /// <summary>
        /// 修改密码
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task UpdatePasswordAsync(UpdatePasswordForm form);
        /// <summary>
        /// 重置密码
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<string> ResetPasswordAsync(SingleId<long> form);
        /// <summary>
        /// 获取佣金明细
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<PagedResultDto<UserCommissionVO>> GetUserCommisionsAsync(UserPagedForm form);
       
        /// <summary>
        /// 获取提现明细
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<PagedResultDto<UserCashVO>> GetUserCashesAsync(UserPagedForm form);
        /// <summary>
        /// 提现重试
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task ReCashAsync(SingleId<long> form);
        /// <summary>
        /// 获取推广用户
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<PagedResultDto<UserVO>> GetSpreadUsersAsync(UserSpreadPagedForm form);
        /// <summary>
        /// 用户卖车列表
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<PagedResultDto<UserSaleVO>> GetUserSalesAsync(UserSalePagedForm form);
        /// <summary>
        /// 卖车处理
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task UserSaleDisposeAsync(SingleId<long> form);
        /// <summary>
        /// 用户改装车列表
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<PagedResultDto<UserRefitVO>> GetUserRefitsAsync(UserRefitPagedForm form);
        /// <summary>
        /// 改装车处理
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task UserRefitDisposeAsync(SingleId<long> form);
        /// <summary>
        /// 推广大使注册申请列表
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<PagedResultDto<UserPromotionVO>> GetUserPromotionsAsync(UserPromotionPagedForm form);
        /// <summary>
        /// 推广大使审核
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task PromotionAuditAsync(UserPromotionAuditForm form);
    
        /// <summary>
        /// 后台修改用户等级
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task UserLevelChangeAsync(UserVipLevelForm form);
        /// <summary>
        /// 后台手动加入用户
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<UserMiniVO> AddNewUserAsync(AddUserForm form);
        /// <summary>
        /// 后台审核用户提现记录
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<string> CashAuditAsync(UserCashAuditForm form);
        /// <summary>
        /// 获取所有用户的提现记录
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<PagedResultDto<UserCashVO>> GetAllUserCashesAsync(UserCashVerifyPagedForm form);
        Task TestPayComplete(string orderNo);
        Task TestRefund(long id);
        /// <summary>
        /// 一键钱包充值
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task ChangeUsersWalletAsync(UserSearchForm form);

        /// <summary>
        /// 获取用户分红列表
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<PagedResultDto<UserDividendsVO>> GetAllUserDividendsAsync(UserSearchForm form);
        /// <summary>
        /// 获取用户分红详情
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<PagedResultDto<UserDividendVO>> GetAllUserDividendAsync(UserPagedForm form);
        /// <summary>
        /// 获取用户体验金详情
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<PagedResultDto<UserPointsVO>> GetUserPointsAsync(UserPointPagedForm form);
        /// <summary>
        /// 获取所有用户体验金详情
        /// </summary>
        /// <param name="form"></param>
        /// <returns></returns>
        Task<PagedResultDto<UserPointsVO>> GetAllUserPointsAsync(UserPointPagedForm form);

    }
}
